// cloudfunctions/reportDevice/index.js
'use strict';
exports.main = async (event, context) => {
  const db = uniCloud.database();
  const {
    device_id,
    system_info // 客户端传递的完整系统信息
  } = event;
  
  // 验证必要参数
  if (!device_id) {
    return {
      success: false,
      error: 'device_id 不能为空'
    };
  }

  try {
    const now = Date.now();
    
    // 检查设备是否已存在
    const existingDevice = await db.collection('opendb-device')
      .where({
        device_id: device_id
      })
      .get();

    // 构建符合表结构的设备数据
    const deviceData = {
      device_id: device_id,
      push_clientid: device_id, // 重要：将device_id同时存入push_clientid
      appid: context.APPID || '__UNI__180DEE6',
      last_update_date: now
    };

    // 如果有系统信息，映射到对应字段
    if (system_info) {
      // 映射系统信息到表字段
      const fieldMapping = {
        platform: 'platform',
        model: 'model',
        system: 'os_version',
        version: 'os_version', // 备用
        appVersion: 'rom_version', // 根据表结构映射到rom_version
        brand: 'vendor',
        screenWidth: 'screen_width',
        screenHeight: 'screen_height',
        windowWidth: 'window_width',
        windowHeight: 'window_height',
        pixelRatio: 'pixel_ratio',
        osName: 'os_name', // 如果客户端提供了osName
        uniPlatform: 'uni_platform' // 如果客户端提供了uniPlatform
      };

      // 执行字段映射
      Object.keys(fieldMapping).forEach(clientField => {
        if (system_info[clientField] !== undefined) {
          const tableField = fieldMapping[clientField];
          deviceData[tableField] = String(system_info[clientField]); // 确保转换为字符串
        }
      });

      // 特殊处理平台类型
      if (system_info.platform) {
        deviceData.os_name = system_info.platform.toLowerCase(); // ios|android
      }

      // 处理网络类型（需要客户端额外获取）
      if (system_info.networkType) {
        deviceData.network_model = system_info.networkType;
      }
    }

    let operation = '';

    if (existingDevice.data.length > 0) {
      // 更新现有设备信息
      operation = 'update';
      await db.collection('opendb-device')
        .where({
          device_id: device_id
        })
        .update(deviceData);
      
      console.log(`设备信息更新成功: ${device_id}`);
    } else {
      // 添加新设备
      operation = 'add';
      deviceData.create_date = now;
      await db.collection('opendb-device').add(deviceData);
      console.log(`新设备添加成功: ${device_id}`);
    }

    // 如果用户已登录，更新用户表的 push_clientid
    if (context.uid) {
      await updateUserPushClientId(context.uid, device_id);
    }

    return {
      success: true,
      operation: operation,
      device_id: device_id,
      message: `设备${operation === 'add' ? '注册' : '更新'}成功`
    };

  } catch (error) {
    console.error('设备信息上报失败:', error);
    return {
      success: false,
      error: error.message
    };
  }
};

// 更新用户表的推送客户端ID
async function updateUserPushClientId(userId, deviceId) {
  const db = uniCloud.database();
  
  try {
    await db.collection('linli-user')
      .where({
        userId: userId
      })
      .update({
        push_clientid: deviceId,
        last_device_update: Date.now()
      });
    
    console.log(`用户 ${userId} 的推送客户端ID更新为: ${deviceId}`);
  } catch (error) {
    console.error('更新用户推送客户端ID失败:', error);
  }
}